package com.lingjtx.iot.tsl.common;

import java.util.ArrayList;

public enum FieldType {
    // 基本数据类型： int, float, double、string、bool（0或1的int类型）
    // struct（结构体类型，只能包含基本数据类型）
    // array（数组类型，支持基本数据类型和 struct）
    // enum（int类型，枚举项定义方法与bool类型定义0和1的值方法相同）

    // int_bin8 8位的int数据：硬件上传 int 数据，服务器进行位解析成 struct 数据类型 (范围：0-255)
    // int_bin16 16位的int数据：硬件上传 int 数据，服务器进行位解析成 struct 数据类型 (范围：0-65535)

    STRING("string", String.class),

    INT("int", Integer.class),

    FLOAT("float", Float.class),

    DOUBLE("double", Double.class),

    BOOL("bool", Boolean.class),

    ENUM("enum", Integer.class),

    STRUCT("struct", Object.class),

    ARRAY("array", ArrayList.class),

    INT_BIN8("int_bin8", Integer.class),

    INT_BIN16("int_bin16", Integer.class),

    INT_BIN32("int_bin32", Integer.class),
    ;

    private String name;

    private Class<?> clazz;

    FieldType(String name, Class<?> clazz) {
        this.name = name;
        this.clazz = clazz;
    }

    public String getName() {
        return name;
    }

    public Class<?> getClazz() {
        return clazz;
    }

    public static Class<?> of(String name) {
        for (FieldType type : FieldType.values()) {
            if (type.getName().equals(name)) {
                return type.getClazz();
            }
        }
        return STRING.getClazz();
    }

    @Override
    public String toString() {
        return this.name;
    }
}
